package br.com.javajsf.controle;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;

import br.com.javajsf.modelo.Cliente;
import br.com.javajsf.modelo.Pagamento;
import br.com.javajsf.negocio.CadastradorCliente;
import br.com.javajsf.negocio.CadastradorPagamento;

@ManagedBean(name = "cadPagamentoBean")
@RequestScoped
public class CCadastroPagamento implements Serializable {

	private static final long serialVersionUID = 1L;
	private int clienteSelecionado;
	private List<SelectItem> listaItemCliente;
	private List<Cliente> listCliente;
	private java.util.Date dataPagCalendar;
	private double valorPag;
	private CadastradorCliente cliDao;
	private CadastradorPagamento pagDao;
	
	
	@PostConstruct
	public void init(){
		if (cliDao == null) {
			cliDao = new CadastradorCliente();
			pagDao = new CadastradorPagamento();
		}
		if(listaItemCliente == null){
			setListaItemCliente(getListaCliente());
		}
	}
	
	
	public List<SelectItem> getListaCliente(){
		ArrayList<SelectItem> listaIterable = new ArrayList<SelectItem>();
		listCliente = (List<Cliente>) cliDao.listarTodos();
		
		for (Cliente teste : listCliente) {
			SelectItem item = new SelectItem(teste.getCod(), teste.getNome());
			listaIterable.add(item);
		}
		return listaIterable;
	}
	
	public void cadastrarPagamento(ActionEvent action){
		System.out.println("Entrou cadastrarPagamento");
		Cliente clie;
		System.out.println("Cliente Selecionado:"+ clienteSelecionado);
		if (clienteSelecionado > 0) {
			System.out.println(clienteSelecionado);
			clie = (Cliente) cliDao.buscarCod(clienteSelecionado);
			if (clie.getNome() != null && dataPagCalendar.toString() != null && valorPag > 0) {
				try {
					java.sql.Date sqlDate = new java.sql.Date(dataPagCalendar.getTime());
		            
					Pagamento pagSeguro = new Pagamento(clie, sqlDate, valorPag);
					pagDao.gravar(pagSeguro);
					FacesContext context = FacesContext.getCurrentInstance();
					context.addMessage(null, new FacesMessage("Pagamento efetuado", "O Pagamento foi efetuado com sucesso"));
					zeraLista();
				} catch (Exception e) {
					FacesContext context = FacesContext.getCurrentInstance();
					context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Falha no pagamento", "erro"));
				}
			}
		}
	}
	
	public void zeraLista(){
		valorPag = 0.0;
		dataPagCalendar = null;
	}
	
	
	//
	public int getClienteSelecionado() {
		return clienteSelecionado;
	}
	public void setClienteSelecionado(int clienteSelecionado) {
		this.clienteSelecionado = clienteSelecionado;
	}
	public List<SelectItem> getListaItemCliente() {
		return listaItemCliente;
	}
	public void setListaItemCliente(List<SelectItem> listaItemCliente) {
		this.listaItemCliente = listaItemCliente;
	}
	public java.util.Date getDataPagCalendar() {
		return dataPagCalendar;
	}
	public void setDataPagCalendar(java.util.Date dataPagCalendar) {
		this.dataPagCalendar = dataPagCalendar;
	}
	public double getValorPag() {
		return valorPag;
	}
	public void setValorPag(double valorPag) {
		this.valorPag = valorPag;
	}

	
	
	
	
	
	
	
	

}
